package com.lagou.homework.stage2.no1;

/**
 * 第一题：
 * 定义一个长度为[16][16]的整型二维数组并输入或指定所有位置的元素值，分别实现二维数组中所有行和所有列中所有元素的累加和并打印。
 * 再分别实现二维数组中左上角到右下角和右上角到左下角所有元素的累加和并打印。
 */
public class ArraySum {

    public static void main(String[] args) {
        // 1.创建长度为[16][16]的二维数组
        int[][] arr = new int[16][16];
        // 2.给长度[16][16]的二维数组赋值
        for (int i=0; i< arr.length; i++){
            for (int j=0; j< arr[i].length; j++){
                arr[i][j] = i*16 + j; // 第一行：0,1,2...15;第二行：16,17,18...31;第三行....
            }
        }
        // 3.打印二维数组
        System.out.println("二维数组：");
        for (int i=0; i<arr.length; i++){
            for (int j=0; j<arr[i].length; j++){
                System.out.print(" " + arr[i][j] + " ");
            }
            System.out.println();
        }
        // 4.分别计算每行每列所有元素的和
        int[] hangSumArr = new int[16]; // 记录每行元素累积和
        int[] lieSumArr = new int[16]; // 记录每列元素累积和
        for (int i=0; i<arr.length;i++){
            for (int j=0; j<arr[i].length; j++){
                hangSumArr[i] += arr[i][j]; // 计入第i行累计和
                lieSumArr[j] += arr[i][j]; // 计入第j列累计和
            }
        }
        // 4.打印计算结果
        System.out.print("每行元素累加和分别为：");
        for (int i=0; i<hangSumArr.length; i++){
            System.out.print(hangSumArr[i] + "  ");
        }
        System.out.println();
        System.out.print("每列元素累加和分别为：");
        for (int i=0; i<lieSumArr.length; i++){
            System.out.print(lieSumArr[i] + "  ");
        }
        System.out.println();

        // 5.记录数组中左上角到右下角所有元素累加和
        int leftUpRightDownSum = 0; // 累加和
        for (int i=0; i<arr.length; i++){
            leftUpRightDownSum += arr[i][i];
        }
        System.out.println("左上角到右下角所有元素累加和为：" + leftUpRightDownSum);

        // 6.记录数组中右上角到左下角所有元素累加和
        int rightUpLeftDownSum = 0;
        for (int i=arr.length-1; i>=0; i--){
            rightUpLeftDownSum += arr[i][arr.length-1-i];
        }
        System.out.println("右上角到左下角所有元素累加和为：" + rightUpLeftDownSum);
    }
}
